package designmode;

/**
 * @Author fallrain
 * @Description 设计模式--单例模式
 * @Date 2022/2/11 14:31
 * @Version 1.0
 */
public class SingletonMode06 {

    private static volatile SingletonMode06 singletonMode06;

    private SingletonMode06(){

    }

    /**
     * 6.双重检查【推荐使用】
     * Double-Check概念对于多线程开发者来说不会陌生，如代码中所示，我们进行了两次if (singleton == null)检查，这样就可以保证线程安全了。
     * 这样，实例化代码只用执行一次，后面再次访问时，判断if (singleton == null)，直接return实例化对象。
     * 优点：线程安全；延迟加载；效率较高。
     * @return
     */
    public static SingletonMode06 getInstance(){
        if (singletonMode06 == null){
            synchronized (SingletonMode06.class){
                if(singletonMode06 == null){
                    singletonMode06 = new SingletonMode06();
                }
            }
        }
        return singletonMode06;
    }

}
